<#--
  Service Excel 导入导出方法
  
  包含：
  - exportData: 导出数据
  - importData: 导入数据
  - downloadImportTemplate: 下载导入模板
-->

    @Override
    public void exportData(${table.entityName}DTO queryDTO, OutputStream outputStream) throws IOException {
        // 查询数据
        List<${table.entityName}DTO> dataList = queryList(queryDTO);
        
        // 数据量限制（防止内存溢出）
        if (dataList.size() > 100000) {
            throw BusinessException.invalidParam("导出数据量过大（超过10万条），请添加筛选条件");
        }
        
        // 使用 ExcelUtils 导出
        ExcelUtils.exportExcel(dataList, ${table.entityName}DTO.class, outputStream);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public Map<String, Object> importData(InputStream inputStream, boolean updateSupport) throws IOException {
        // 使用 ExcelUtils 读取数据
        List<${table.entityName}DTO> dtoList = ExcelUtils.importExcel(inputStream, ${table.entityName}DTO.class);
        
        int total = dtoList.size();
        int successCount = 0;
        int failureCount = 0;
        List<String> errorMessages = new ArrayList<>();
        
        for (int i = 0; i < dtoList.size(); i++) {
            ${table.entityName}DTO dto = dtoList.get(i);
            try {
                if (updateSupport) {
                    // 更新逻辑：根据ID判断是更新还是创建
                    // TODO: 如果需要根据其他唯一字段（如code）判断，请修改此处逻辑
<#list columns as c>
  <#if c.propertyName?? && c.propertyName == "id">
                    if (dto.get${c.propertyName?cap_first}() != null) {
                        // 尝试查询现有记录
                        ${table.entityName} existing = ${lowerEntity}Mapper.selectById(dto.get${c.propertyName?cap_first}());
                        if (existing != null) {
                            // 更新
                            update(dto.get${c.propertyName?cap_first}(), dto);
                        } else {
                            // 创建
                            create(dto);
                        }
                    } else {
                        // ID为空，创建新记录
                        create(dto);
                    }
    <#break>
  </#if>
</#list>
                } else {
                    // 总是创建新记录
                    create(dto);
                }
                successCount++;
            } catch (Exception e) {
                failureCount++;
                String errorMsg = String.format("第%d行导入失败: %s", i + 1, e.getMessage());
                errorMessages.add(errorMsg);
                logger.error(errorMsg, e);
            }
        }
        
        // 构建返回结果
        Map<String, Object> result = new HashMap<>();
        result.put("total", total);
        result.put("successCount", successCount);
        result.put("failureCount", failureCount);
        result.put("errorMessages", errorMessages);
        
        return result;
    }

    @Override
    public void downloadImportTemplate(OutputStream outputStream) throws IOException {
        // 创建空数据列表作为模板
        List<${table.entityName}DTO> templateList = new ArrayList<>();
        
        // 可以添加一行示例数据
        // ${table.entityName}DTO example = new ${table.entityName}DTO();
        // // 设置示例值...
        // templateList.add(example);
        
        // 导出模板
        ExcelUtils.exportExcel(templateList, ${table.entityName}DTO.class, outputStream);
    }

